Hệ thống quản lý phòng khám trực tuyến bằng PHP
1 <?php if(!defined('datalist_date_separator')) die('datalist.php not included!');
2
3 class DateCombo{
4 // renders a date combo with a pre-selected date
5
6 var $DateFormat, // any combination of y,m,d
7 $DefaultDate, // format: yyyy-mm-dd
8 $MinYear,
9 $MaxYear,
10 $MonthNames,
11 $Comment,
12 $NamePrefix, // will be used in the HTML name prop as a prefix to "Year", "Month", "Day"
13 $CSSOptionClass,
14 $CSSSelectedClass,
15 $CSSCommentClass;
16
17 function __construct(){ // PHP 7 compatibility
18 $this->DateCombo();
19 }
20
21 function DateCombo(){
22 // set default values
23 $this->DateFormat = "ymd";
24 $this->DefaultDate = '';
25 $this->MinYear = 1900;
26 $this->MaxYear = 2100;
27 $this->MonthNames = "January,February,March,April,May,June,July,August,September,October,November,December";
28 $this->Comment = "<empty>";
29 $this->NamePrefix = "Date";
30
31 $this->CSSOptionClass = 'form-control';
32 $this->CSSSelectedClass = 'active';
33 $this->CSSCommentClass = '';
34 }
35
36 function GetHTML($readOnly=false){
37 list($xy, $xm, $xd)=explode('-', $this->DefaultDate);
38
39 //$y : render years combo
40 $years = new Combo;
41 for($i=$this->MinYear; $i<=$this->MaxYear; $i++){
42 $years->ListItem[] = $i;
43 $years->ListData[] = $i;
44 }
45 $years->SelectName = $this->NamePrefix . 'Year';
46 $years->SelectID = $this->NamePrefix;
47 $years->SelectedData = $xy;
48 $years->Class = "{$this->CSSOptionClass} split-date";
49 $years->SelectedClass = $this->CSSSelectedClass;
50 $years->ApplySelect2 = false;
51 $years->Render();
52 $y = ($readOnly ? substr($this->DefaultDate, 0, 4) : $years->HTML);
53
54 //$m : render months combo
55 $months = new Combo;
56 for($i=1; $i<=12; $i++){
57 $months->ListData[] = $i;
58 }
59 $months->ListItem = explode(",", $this->MonthNames);
60 $months->SelectName = $this->NamePrefix . 'Month';
61 $months->SelectID = $this->NamePrefix . '-mm';
62 $months->SelectedData = intval($xm);
63 $months->Class = $this->CSSOptionClass;
64 $months->SelectedClass = $this->CSSSelectedClass;
65 $months->ApplySelect2 = false;
66 $months->Render();
67 $m = ($readOnly ? $xm : $months->HTML);
68
69 //$d : render days combo
70 $days = new Combo;
71 for($i=1; $i<=31; $i++){
72 $days->ListItem[] = $i;
73 $days->ListData[] = $i;
74 }
75 $days->SelectName = $this->NamePrefix . 'Day';
76 $days->SelectID = $this->NamePrefix . '-dd';
77 $days->SelectedData = intval($xd);
78 $days->Class = $this->CSSOptionClass;
79 $days->SelectedClass = $this->CSSSelectedClass;
80 $days->ApplySelect2 = false;
81 $days->Render();
82 $d = ($readOnly ? $xd : $days->HTML);
83
84 $df = $this->DateFormat; // contains date order 'myd', 'dmy' ... etc
85
86 $read_only_date = ${$df[0]} . datalist_date_separator . ${$df[1]} . datalist_date_separator . ${$df[2]};
87 if($read_only_date == datalist_date_separator.datalist_date_separator) $read_only_date = '';
88 //$read_only_date = '<p class="form-control-static">' . $read_only_date . '</p>';
89
90 $editable_date = '<div class="row">';
91 for($i = 0; $i < 3; $i++){
92 switch($df[$i]){
93 case 'd':
94 $editable_date .= '<div class="col-xs-3 date_combo">' . $d . '</div>';
95 break;
96 case 'm':
97 $editable_date .= '<div class="col-xs-4 date_combo">' . $m . '</div>';
98 break;
99 case 'y':
100 $editable_date .= '<div class="col-xs-3 date_combo">' . $y . '</div>';
101 break;
102 }
103 if($i == 2) $editable_date .= '<div class="col-xs-2"><button class="btn btn-default" id="fd-but-' . $this->NamePrefix . '"><i class="glyphicon glyphicon-th"></i></button></div>';
104 }
105 $editable_date .= '</div>';
106
107 return ($readOnly ? $read_only_date : $editable_date);
108 }
109 }